Agent Skills原理及应用
使用“智能体技能”为智能体赋予应对现实世界的能力
Claude 实力强大,但实际工作往往需要过程性知识和组织上下文。今天,我们隆重推出“智能体技能”(Agent Skills),这是一种利用文件和文件夹构建专用智能体的全新方式。
随着模型能力的提升,我们现在能够构建与完整计算环境交互的通用智能体。例如,Claude Code 可以通过执行本地代码和访问文件系统来完成跨领域的复杂任务。但是,随着这些智能体变得越来越强大,我们需要一种更具组合性、可扩展性和可移植性的方式,为它们配备特定领域的专业知识。
因此,我们创建了“智能体技能”:这是一个包含指令、脚本和资源的结构化文件夹,智能体可以动态发现并加载这些内容,从而在特定任务中表现得更出色。“技能”通过将您的专业知识打包成 Claude 可用的可组合资源,扩展了 Claude 的能力,将通用智能体转化为满足您需求的专用智能体。
为智能体构建一项“技能”,就像为新员工编写入职指南。现在,我们无需再为每个用例构建零散的定制化智能体,任何人都可以通过记录并分享自己的过程性知识,利用可组合的能力来实现智能体的专业化。在本文中,我们将解释什么是“技能”、它们是如何工作的,并分享构建专属技能的最佳实践。

一项技能通常是一个包含
SKILL.md文件的目录,该目录中还包含了结构化的指令、脚本和资源文件夹,用于赋予智能体额外的能力。
技能的结构剖析
为了解“技能”的实际应用,我们来看一个真实的例子:为 Claude 最近推出的文档编辑功能提供支持的一项技能。Claude 在理解 PDF 方面已经具备了丰富的知识,但在直接操作 PDF(例如填写表单)方面能力有限。通过这项 PDF 技能,我们就能赋予 Claude 这些新能力。
简单来说,一项技能就是一个包含 SKILL.md 文件的目录。这个文件必须以包含必要元数据(名称和描述)的 YAML 头部信息(Frontmatter)开头。在启动时,智能体会将所有已安装技能的名称和描述预加载到其系统提示词(System Prompt)中。
这种元数据是“渐进式披露”的第一层:它刚好能提供足够的信息,让 Claude 知道应该在何时使用各项技能,而无需将其全部内容加载到上下文中。该文件的正文部分是第二层细节。如果 Claude 认为该技能与当前任务相关,它就会读取完整的 SKILL.md 到上下文中,从而加载这项技能。

SKILL.md文件必须以包含文件名和描述的 YAML 头部信息开头,这些信息在启动时会被加载到系统提示词中。
随着技能变得越来越复杂,它们包含的上下文可能会过多而无法放入单个 SKILL.md 中,或者某些上下文仅在特定场景下才相关。在这些情况下,技能可以在技能目录中捆绑包含额外文件,并在 SKILL.md 中通过名称引用它们。这些额外的链接文件是第三层(以及更深层次)的细节,Claude 可以选择仅在需要时去导航和发现它们。
在下面展示的 PDF 技能中,SKILL.md 引用了两个额外的文件(reference.md 和 forms.md),这是技能作者选择与核心 SKILL.md 捆绑在一起的。通过将填写表单的指令移到一个单独的文件(forms.md)中,技能作者能够保持核心技能的精简,并相信 Claude 只会在填写表单时才去读取 forms.md。

你可以将更多上下文(通过附加文件)合并到技能中,Claude 随后可根据系统提示词触发这些内容。
“渐进式披露”是让智能体技能具备灵活性和可扩展性的核心设计原则。就像一本结构清晰的手册,从目录开始,接着是特定章节,最后是详细的附录,技能让 Claude 仅在需要时才加载信息:
| 层级 | 文件 | 上下文窗口 | Token 数量 |
|---|---|---|---|
| 1 | SKILL.md 元数据 (YAML) | 始终加载 | ~100 |
| 2 | SKILL.md 正文 (Markdown) | 技能触发时加载 | <5k |
| 3+ | 捆绑文件(文本文件、脚本、数据) | 由 Claude 按需加载 | 无限制* |
拥有文件系统和代码执行工具的智能体在处理特定任务时,不需要将技能的全部内容读取到其上下文窗口中。这意味着,可以捆绑到一个技能中的上下文数量实际上是无限的。
技能与上下文窗口
下图展示了当用户消息触发某项技能时,上下文窗口是如何变化的。

技能通过系统提示词在上下文窗口中被触发。
图中展示的操作序列如下:
- 开始时,上下文窗口包含核心系统提示词和每个已安装技能的元数据,以及用户的初始消息;
- Claude 通过调用 Bash 工具读取
pdf/SKILL.md的内容来触发 PDF 技能; - Claude 选择读取与技能捆绑的
forms.md文件; - 最后,由于已经加载了 PDF 技能中的相关指令,Claude 继续执行用户的任务。
技能与代码执行
技能还可以包含代码,供 Claude 根据情况作为工具执行。
大型语言模型擅长处理许多任务,但某些操作更适合通过传统代码执行来完成。例如,通过生成词元(Token)来对列表进行排序,其成本远高于直接运行排序算法。除了效率方面的考虑,许多应用程序还需要只有代码才能提供的确定性可靠性。
在我们的示例中,PDF 技能包含一个预先编写的 Python 脚本,用于读取 PDF 并提取所有表单字段。Claude 可以在不将脚本或 PDF 加载到上下文中的情况下运行该脚本。由于代码是确定性的,因此这种工作流是一致且可重复的。

技能还可以包含代码,供 Claude 根据任务性质自主决定作为工具执行。
技能的开发与评估
以下是一些帮助您开始编写和测试技能的实用指南:
- 从评估开始:通过在典型任务上运行智能体,观察它们在哪些方面遇到困难或需要额外的上下文,从而找出智能体能力的具体空白。然后,逐步构建技能来弥补这些不足。
- 为规模化构建结构:当
SKILL.md文件变得过于庞大时,请将其内容拆分到单独的文件中并进行引用。如果某些上下文是互斥的或很少一起使用,保持独立的路径将减少 Token 消耗。最后,代码既可以作为可执行工具,也可以作为文档。您应该明确 Claude 是直接运行脚本,还是将其作为参考资料读取到上下文中。 - 从 Claude 的视角思考:监控 Claude 在真实场景中如何使用您的技能,并根据观察结果进行迭代:留意是否存在偏离预期的执行轨迹,或对某些上下文的过度依赖。要特别注意技能的名称和描述。Claude 在决定是否触发该技能以响应当前任务时,将依赖这些信息。
- 与 Claude 一起迭代:在与 Claude 协作完成任务时,让 Claude 将其成功的方法和常见的错误总结为可重复使用的上下文和代码,并存入技能中。如果在利用技能完成任务时偏离了正轨,让它自我反思哪里出了问题。这个过程将帮助你发现 Claude 真正需要的上下文,而不是试图在一开始就去预测。
使用技能时的安全注意事项
技能通过指令和代码为 Claude 提供了新的能力。虽然这使技能变得非常强大,但也意味着恶意技能可能会在使用环境中引入漏洞,或引导 Claude 窃取数据及采取意外的行动。
我们建议仅从受信任的来源安装技能。当从不太受信任的来源安装技能时,请在使用前对其进行全面审查。首先阅读技能中捆绑的文件内容以了解其功能,要特别注意代码依赖项以及诸如图像或脚本之类的捆绑资源。同样,也要留意技能中指示 Claude 连接到可能不受信任的外部网络源的指令或代码。
技能的未来
如今,Claude.ai、Claude Code、Claude Agent SDK 以及 Claude 开发者平台(Claude Developer Platform)都已经支持“智能体技能”。
在接下来的几周里,我们将继续添加支持技能创建、编辑、发现、共享和使用全生命周期的功能。我们对于“技能”能够帮助组织和个人与 Claude 共享其上下文和工作流的巨大潜力感到特别期待。我们还将探索“技能”如何通过教会智能体使用涉及外部工具和软件的更复杂的工作流,来作为模型上下文协议(MCP)服务器的补充。
展望更远的未来,我们希望能让智能体自行创建、编辑和评估“技能”,让它们能够将自己的行为模式编码为可重复使用的能力。
“技能”是一个简单的概念,且具有相对应的简单格式。这种简单性使得组织、开发者和最终用户更容易构建定制化的智能体并赋予它们新的能力。
我们非常期待看到大家使用“技能”所构建出的成果。今天就开始行动吧,欢迎查阅我们的“技能”文档和示例指南(Cookbook)。
致谢
本文由 Barry Zhang、Keith Lazuka 和 Mahesh Murag 撰写,他们都非常喜欢文件夹。特别感谢 Anthropic 公司内众多倡导、支持和构建“技能”的同事们。